package solution;


/*
* 283 Array
* */
public class MoveZeroes {
    /*
     * 1.使用双指针将非0元素移动到前面
     * 2.填充后面的0
     * */
    public static void solution1(int[] nums){
//        int pointerA = 0;
//        int pointerB = 0;
//        for (; pointerA < nums.length ; pointerA++){
//            if (nums[pointerA] != 0) {
//                nums[pointerB] = nums[pointerA];
//                pointerB++;
//            }
//        }
//        for (; pointerB < nums.length ; pointerB++){
//            nums[pointerB] = 0;
//        }

//        //优化写法
//        if (nums != null && nums.length > 1){
//            int i = 0;
//            for (int j = 0 ; j < nums.length ; j++){
//                if (nums[j] != 0){
//                    nums[i] = nums[j];
//                    i++;
//                }
//            }
//
//            for (; i < nums.length ; i++){
//                nums[i] = 0;
//            }
//        }

        //顺手的写法
        if (nums != null && nums.length > 1){
            int i = 0;
            int j = 0;
            while (i < nums.length){
                if (nums[i] != 0){
                    nums[j] = nums[i];
                    j++;
                }
                i++;
            }

            while (j < nums.length){
                nums[j] = 0;
                j++;
            }
        }
    }

    /*
     * 1.使用双指针进行元素交互
     * 相比solution1减少内存
     *
     * pointA = 1时，过不了测试
     * nums[pointA] != 0 && pointA != pointB时，过不了测试
     * */
    public static void solution2(int[] nums){
//        int pointerA = 0;
//        int pointerB = 0;
//        for (; pointerA < nums.length ; pointerA++){
//            if (nums[pointerA] != 0){
//                int temp = nums[pointerB];
//                nums[pointerB] = nums[pointerA];
//                nums[pointerA] = temp;
//                pointerB++;
//            }
//        }

        //优化的写法
        if (nums != null && nums.length > 1){
            int i = 0;
            for (int j = 0 ; j < nums.length ; j++){
                if (nums[j] != 0){
                    if (i != j){
                        nums[i] = nums[j];
                        nums[j] = 0;
                    }
                    i++;
                }
            }
        }
    }
}
